//#include <stdio.h>
//#include <stdlib.h>
//struct Stu{
//	int name;
//	float score;
//	struct Stu* next;
//};
//typedef struct Stu LinkNode;
//typedef struct Stu* LinkList;
//LinkList AddNode(LinkList head)
//{
//    LinkList p=NULL,q=NULL;
//	int aname;
//	float ascore;
//	while(1)
//	{
//		scanf("%d",&aname);
//		scanf("%f",&ascore);
//		if(ascore<0)
//			break;
//		else{
//			q=(LinkList)malloc(sizeof(LinkNode));
//			q->score=ascore;
//			q->name=aname;
//			q->next=NULL;
//		}
//		if(head==NULL)
//			head=p=q;
//		else
//			p->next=q;
//		p=q;
//	}
//	return head;
//}	
//LinkList CompareNode(LinkList head1,LinkList head2)
//{
//	LinkList p1,p2,head3=NULL,p3=NULL,q3=NULL;
//	p1=head1;
//	p2=head2;
//	if(head1==NULL&&head2!=NULL)
//		return head2;
//	if(head1!=NULL&&head2==NULL)
//		return head2;
//	while(p1&&p2)
//	{
//		if(p1->name<p2->name)
//		{
//			q3=(LinkList)malloc(sizeof(LinkNode));
//			q3->name=p1->name;
//			q3->score=p1->score;
//			q3->next=NULL;
//			p1=p1->next;
//		}
//		else{
//			q3=(LinkList)malloc(sizeof(LinkNode));
//			q3->name=p2->name;
//			q3->score=p2->score;
//			q3->next=NULL;
//			p2=p2->next;
//		}
//		if(!head3)
//		{
//			head3=p3=q3;
//		}
//		else
//			p3->next=q3;
//		p3=q3;
//	}
//	if(p1!=NULL)
//		p3->next=p1;
//	else if(p2!=NULL)
//		p3->next=p2;
//	return head3;
//}
//void Print(LinkList head)
//{
//	LinkList p=head;
//	while(p)
//	{
//		printf("%d\t%f\n",p->name,p->score);
//		p=p->next;
//	}
//}
//void Free(LinkList head)
//{
//	LinkList p=head,q=NULL;
//	while(p)
//	{
//		q=p->next;
//		free(p);
//		p=q;
//	}
//}
//int main()
//{
//	LinkList head1,head2,head3;
//	head1=head2=head3=NULL;
//	head1=AddNode(head1);
//	head2=AddNode(head2);
//	head3=CompareNode(head1,head2);
//	Print(head3);
//	Free(head1);
//	Free(head2);
////	Free(head3);
//	return 0;
//}
#include <stdio.h>
#include <stdlib.h>
struct Stu{
	int name;
	float score;
	struct Stu* next;
};
typedef struct Stu LinkNode;
typedef struct Stu* LinkList;
LinkList AddNode(LinkList head)
{
	LinkList p=NULL,q=NULL;
	int aname;
	float ascore;
	while(1)
	{
		scanf("%d",&aname);
		scanf("%f",&ascore);
		if(ascore<0)
			break;
		else{
			q=(LinkList)malloc(sizeof(LinkNode));
			q->score=ascore;
			q->name=aname;
			q->next=NULL;
		}
		if(head==NULL)
			head=p=q;
		else
			p->next=q;
		p=q;
	}
	return head;
}
LinkList InsertNode(LinkList head,int anum,float ascore)
{
	LinkList anew,p;
	anew=(LinkList)malloc(sizeof(LinkNode));
	anew->score=ascore;
	anew->name=anum;
	anew->next=NULL;
	if(head==NULL)
		head=anew;
	else
	{
		p=head;
		while(p->next)
		{
			p=p->next;
		}
		p->next=anew;
	}
	return head;
}
LinkList CompareNode(LinkList head1,LinkList head2)
{
	LinkList p1,p2,head3=NULL,p3=NULL,q3=NULL;
	p1=head1;
	p2=head2;
	if(head1==NULL&&head2!=NULL)
		return head2;
	if(head1!=NULL&&head2==NULL)
		return head1;
	while(p1&&p2)
	{
		if(p1->name<p2->name)
		{
			head3=InsertNode(head3,p1->name,p1->score);
			p1=p1->next;
		}
		else{
			head3=InsertNode(head3,p2->name,p2->score);
			p2=p2->next;
		}
	}
	while(p1!=NULL)
	{
		head3=InsertNode(head3,p1->name,p1->score);
		p1=p1->next;
	}
	while(p2!=NULL)
	{
		head3=InsertNode(head3,p2->name,p2->score);
		p2=p2->next;
	}
	return head3;
}
void Print(LinkList head)
{
	LinkList p=head;
	while(p)
	{
		printf("%d\t%f\n",p->name,p->score);
		p=p->next;
	}
}
void Free(LinkList head)
{
	LinkList p=head,q=NULL;
	while(p)
	{
		q=p->next;
		free(p);
		p=q;
	}
}
int main()
{
	LinkList head1,head2,head3;
	head1=head2=head3=NULL;
	head1=AddNode(head1);
	head2=AddNode(head2);
	head3=CompareNode(head1,head2);
	Print(head3);
	Free(head1);
	Free(head2);
	Free(head3);
	return 0;
}
